# coding=utf-8
"""
这个案例，个人感觉引入有点生硬，经过询问人工智能，以及之前Java切面编程概念的基础，其实直接丰富原有函数即可，不需要引入闭包概念，即可完成装饰器功能。
也就是outer_func()不需要闭包，直接传递需要被装饰的函数作为参数，然后在形参函数前后装饰即可。但此种方式和闭包的区别在于，不会生成一个新的函数对象，也就是inner_func()，而是每次调用时直接使用outer_func()
"""


def outer_func(func):
    def inner_func():
        print(f'{func.__name__}方法调用之前')
        func()
        print(f'{func.__name__}方法调用之后')

    return inner_func


def outer_func1(func):
    print(f'{func.__name__}方法调用之前')
    func()
    print(f'{func.__name__}方法调用之后')


def fun1():
    print('使用功能1')


def fun2():
    print('使用功能2')


fun11 = outer_func(fun1)
fun22 = outer_func(fun2)
fun11()
fun22()
print('----------')
outer_func1(fun1)
# 上面这段代码中，outer_func实现了装饰器的功能吗？outer_func1实现了装饰器的功能吗？两者有什么区别？为什么python中装饰器是用前者即闭包的形式实现，不是用后者？